/*
 * Copyright 2004-2005 asoft
 * 本软件及其所有拷贝的名称，与光盘上或本软件中注明的公司同在。
 * 本软件及文档享有版权，并受国家版权法及国际协约条款的保护。
 * 您不可以从本软件中去掉其版权声明；并保证为本软件的拷贝（本部或部分）* 复制版权声明。
 * 您同意制止以任何形式非法拷贝本软件及文档。
 * 版权信息参见：
 *      http://www.asoft.cn/licenses
 */

package com.asoft.examonline.exammanager.valid;

import java.util.LinkedHashSet;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.testng.Assert;

import com.asoft.common.util.mvc.valid.ValidatedResult;
import com.asoft.examonline.exammanager.define.SelectedQuestion;
import com.asoft.examonline.exammanager.model.ExamQuestion;
import com.asoft.examonline.exammanager.model.Result;

/**
 * <p>Title: 选择题校验模板</p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: asoft</p>
 * @ $Author: author $
 * @ $Date: 2005/02/16 01:04:14 $
 * @ $Revision: 1.7 $
 * @ created in 2005-11-14
 *
 */

public  class SelectedExamQuestionsValidatorTemplet extends ExamQuestionsValidatorTemplet
{
        static Logger logger = Logger.getLogger(SelectedExamQuestionsValidatorTemplet.class);
        
        public void validingResults(HttpServletRequest request,ValidatedResult vr)
        {
                String[] resultContents = new String[8];
                int resultContentSize = 0; // 答案个数
                for(int i = 0; i < 8; i ++)
                {
                        String resultContent = request.getParameter("resultContent" + i);
                        if(resultContent == null)
                        {
                                throw new UnsupportedOperationException("resultContent" + i + "为空");
                        }
                        if(resultContent.equals(SelectedQuestion.NO_SUCH_ITEM))
                        {
                                resultContents[i] = null;                                
                        }
                        else
                        {
                                resultContents[i] = resultContent;
                                resultContentSize ++;
                        }
                        
                }
                // 检测有无断层
                logger.debug("检测有无断层");
                int tempSize = resultContentSize;
                for(int i = 0; i < 8; i ++)
                {
                        if(resultContents[i] != null)
                        {
                                logger.debug(i + " != null "  + tempSize);
                                tempSize --;
                        }
                        else
                        {
                                logger.debug(i + " == null " + tempSize);
                                if(tempSize != 0)
                                {
                                        logger.debug("找到断层拉: " + "resultContent" + i);
                                        vr.setErrMess("resultContent" + i, "必填");
                                        vr.setErrMess("resultContent", "答案必须连续");
                                }
                        }
                }
                if(resultContentSize <= 1)
                {
                        vr.setErrMess("resultContent", "答案个数太少");
                        return;
                }
                
                String[] results = request.getParameterValues("result");
                if(results == null )
                {
                        vr.setErrMess("result", "至少有一个正确答案");
                }
                if(vr.isValidated("resultContent")&&vr.isValidated("result"))
                {
                        for(int i =0; i < results.length; i ++)
                        {
                                int index = Integer.parseInt(results[i]);
                                if(index >= resultContentSize)
                                {
                                        logger.debug("越界：(" + index + " >= " + resultContentSize+ ")");
                                        vr.setErrMess("result", "程序错误：越界");
                                        return;
                                }
                        }
                        
                }
        }
        
}
